def decorated(foo):
    def wrapper(func):
        def inner(*args, **kwargs):
            return func(*args, **kwargs)
        return inner
    return wrapper

# 一层装饰器可以在函数执行前后执行自定义代码
def decorated1(func):  # 在函数前加日志
    print("log start")
    return func


# 二层装饰器可以截取参数
def decorated2(func):
    def inner(*args, **kwargs):
        print("log start")
        return func(*args, **kwargs)
    return inner


# 三层装饰器可以额外传入参数
def decorated3(foo, bar="bar"):  # 传参数给装饰器做具体处理
    def actual_inner(func):
        def inner(*args, **kwargs):
            print("log start", foo, bar)
            return func(*args, **kwargs)
        return inner
    return actual_inner
